Paso 6 (2)- Trayectorias de hospitalización y mortalidad con foco en condiciones vinculadas a trastornos de salud mental y consumo de sustancias posterior a un primer ingreso por alguno de estos trastornos, en usuarios/as jóvenes y adultos emergentes de población general y pertenecientes a pueblos originarios, 2018-2021, Chile
Análisis de sensibilidad para resolución trimestral, utilizando una solución con una mayor cantidad de conglomerados.
Autor/a
Andrés González Santa Cruz
Fecha de publicación
13 de may, 2025
Configurar
Código
# remover objetos y memoria utilizadarm(list=ls());gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 598972 32.0 1288372 68.9 688945 36.8
Vcells 1141119 8.8 8388608 64.0 1876026 14.4
1.2. Sensibilidad= PAM (OM), sol 6 cluster- diagnósticos
Código
invisible("Me da buena: 0,61 en promedio. Se mantiene. El problema está con 5710 es negativo")sil_pam_om_clus6_q_nostd<-silhouette(as.integer(pamRange_quarter_om$clustering$cluster6), as.dist(dist_quarter_om))# Crear etiquetas personalizadascluster_labels6 <-paste0("Cluster ", seq_along(attr(summary(sil_pam_om_clus6_q_nostd)$clus.avg.widths, "dimnames")[[1]]), ":\nAWS ", sprintf("%1.2f",summary(sil_pam_om_clus6_q_nostd)$clus.avg.widths))# Graficar con etiquetas personalizadasfviz_silhouette( sil_pam_om_clus6_q_nostd, lab.clusters = cluster_labels6, # Etiquetas personalizadas para los clústeresprint.summary=F) +scale_fill_grey(start =0.2, end =0.8, labels = cluster_labels6) +# Escala de grisesscale_color_grey(start =0.2, end =0.8, labels = cluster_labels6)+# Escala de grises para los bordeaggtitle(NULL)+labs(y="Ancho medio de la silueta", x="Conglomerados")# Elimina el título
tabla_conteo <-table(pamRange_quarter_om$clustering$cluster6, pamRange_quarter_om$clustering$cluster4)# Proporción por filatabla_prop_fila <-prop.table(tabla_conteo, 1)# Proporción por columnatabla_prop_col <-prop.table(tabla_conteo, 2)# Redondear ambastabla_prop_fila <-sprintf("%1.1f", tabla_prop_fila*100)tabla_prop_col <-sprintf("%1.1f", tabla_prop_col*100)# Combinar ambas proporciones en el formato "fila / col"tabla_combinada <-matrix(paste0(tabla_prop_fila, " / ", tabla_prop_col),nrow =nrow(tabla_conteo),ncol =ncol(tabla_conteo),dimnames =dimnames(tabla_conteo))# Convertir la tabla a un formato limpio con kabletabla_combinada |>data.frame() |>select(`X6623`, `X6612`, `X6522`, `X6574`) |>kable(caption ="Porcentajes de Clusters (por fila / por columna), Solución de 6 vs. 4 conglomerados", col.names =c("6623, Un trimestre, TSM(4)", "6612, Un trimestre, TUS(4)", "6522, Un semestre TSM(2)", "6574, Comorbilidad un trimestre(3)" ), align ="c" ) |>kable_classic() |>footnote(general ="6268= TSM, 1 año después, TSM; 6522= Un semestre TSM; 6574= Comorbilidad un trimestre; 6612= Un trimestre, TUS; 6623= Un trimestre, TSM; 6624= TSM, 1 año después, otras causas",general_title ="Nota:",footnote_as_chunk =TRUE,escape =FALSE )
Error in select(data.frame(tabla_combinada), X6623, X6612, X6522, X6574): los argumentos no fueron usados (X6623, X6612, X6522, X6574)
Vemos los diagnósticos que vienen después de aquellos cluster con más de un ingreso.
Código
diag_pam_om6_q_6624<-df_filled2|> dplyr::filter(run %in%subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6624", clus_pam_om6))$run)|> dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo)|> dplyr::group_by(run)|> dplyr::filter(row_number() !=1)|># Elimina la primera observación de cada run dplyr::mutate(all_diags =paste(na.omit(c(diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11)), collapse =", ") )|> dplyr::summarise(all_diags =first(all_diags),fecha_egreso_rec_fmt =first(fecha_egreso_rec_fmt),estab_homo =first(estab_homo) )|> dplyr::ungroup()|> dplyr::pull(all_diags)|># Extraer la columna all_diags como vectorstrsplit(split =", ")|># Separar cada diagnóstico por comasunlist() # Convertir la lista en un vectorinvisible("head(arrange(data.frame(table(diag_pam_om6_q_6624)) |> mutate(across(1, as.character)), -Freq),10) |> dput()")invisible("Para chatgpt= estos son códigos de CIE-10, descríbeme brevemente cada uno en markdown en formato 'Cód. CIE-10 (n=Freq) - [descripción] '")
Entre quienes se encontraron ingresados en el sistemas por TSM, y luego de un año son ingresados por otras causas, esas causas posteriores abarcan principalmente:
F19.2 (n=26) - Trastornos mentales y del comportamiento debido al uso de múltiples drogas y al uso de otras sustancias psicoactivas: síndrome de dependencia.
E10.1 (n=25) - Diabetes mellitus tipo 1 con cetoacidosis.
O00.8 (n=19) - Otros embarazos ectópicos.
F60.9 (n=18) - Trastorno de la personalidad, no especificado.
Z51.8 (n=18) - Encuentro para otro tipo de atención posterior especificada.
N39.0 (n=17) - Infección del tracto urinario, sitio no especificado.
Z37.0 (n=17) - Nacimiento único vivo.
F60.3 (n=16) - Trastorno de la personalidad borderline.
diag_pam_om7_q_6268<-df_filled2|> dplyr::filter(run %in%subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6268", clus_pam_om6))$run)|> dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo)|> dplyr::group_by(run)|> dplyr::filter(row_number() !=1)|># Elimina la primera observación de cada run dplyr::mutate(all_diags =paste(na.omit(c(diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11)), collapse =", ") )|> dplyr::summarise(all_diags =first(all_diags),fecha_egreso_rec_fmt =first(fecha_egreso_rec_fmt),estab_homo =first(estab_homo) )|> dplyr::ungroup()|> dplyr::pull(all_diags)|># Extraer la columna all_diags como vectorstrsplit(split =", ")|># Separar cada diagnóstico por comasunlist() # Convertir la lista en un vectorinvisible("head(arrange(data.frame(table(diag_pam_om7_q_6268)) |> mutate(across(1, as.character)), -Freq),10) |> dput()")invisible("Para chatgpt= estos son códigos de CIE-10, descríbeme brevemente cada uno en markdown en formato 'Cód. CIE-10 (n=Freq) - [descripción] '")
Entre las trayectorias que ingresaron por trastornos de salud mental, y posteriormente reingreesaron por las mismas causas un año después (5710), estas son las principales causas por las que reingresan posteriormente:
F60.3 (n=77) - Trastorno de la personalidad emocionalmente inestable (trastorno límite de la personalidad).
F60.9 (n=59) - Trastorno de la personalidad, no especificado.
F32.9 (n=55) - Trastorno depresivo mayor, episodio único, no especificado.
F31.9 (n=43) - Trastorno bipolar, no especificado.
F19.2 (n=36) - Trastornos mentales y del comportamiento debido al uso de múltiples drogas y al uso de otras sustancias psicoactivas: síndrome de dependencia.
C49.9 (n=29) - Neoplasia maligna del tejido conectivo y de tejidos blandos, no especificado.
G90.9 (n=21) - Trastorno del sistema nervioso autónomo, no especificado.
Código
diag_pam_om7_q_6522<-df_filled2|> dplyr::filter(run %in%subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, grepl("6522", clus_pam_om6))$run)|> dplyr::select(run, diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11, fecha_egreso_rec_fmt, estab_homo)|> dplyr::group_by(run)|> dplyr::filter(row_number() !=1)|># Elimina la primera observación de cada run dplyr::mutate(all_diags =paste(na.omit(c(diag1, diag2, diag3, diag4, diag5, diag6, diag7, diag8, diag9, diag10, diag11)), collapse =", ") )|> dplyr::summarise(all_diags =first(all_diags),fecha_egreso_rec_fmt =first(fecha_egreso_rec_fmt),estab_homo =first(estab_homo) )|> dplyr::ungroup()|> dplyr::pull(all_diags)|># Extraer la columna all_diags como vectorstrsplit(split =", ")|># Separar cada diagnóstico por comasunlist() # Convertir la lista en un vectorinvisible("head(arrange(data.frame(table(diag_pam_om7_q_6522)) |> mutate(across(1, as.character)), -Freq),10) |> dput()")invisible("Para chatgpt= estos son códigos de CIE-10, descríbeme brevemente cada uno en markdown en formato 'Cód. CIE-10 (n=Freq) - [descripción] '")
Entre quienes experimentaron una trayectoria conssitente en ingresar por trastornos de salud mental, y luego de 6 meses reingresar por las mismas causas, (5935), se encuentran los siguientes diagnósticos al reingreso:
F32.9 (n=102) - Trastorno depresivo mayor, episodio único, no especificado.
F60.9 (n=71) - Trastorno de la personalidad, no especificado.
F20.9 (n=59) - Esquizofrenia, no especificada.
F60.3 (n=58) - Trastorno de la personalidad emocionalmente inestable (trastorno límite de la personalidad).
F31.9 (n=42) - Trastorno bipolar, no especificado.
F19.2 (n=39) - Trastornos mentales y del comportamiento debido al uso de múltiples drogas y al uso de otras sustancias psicoactivas: síndrome de dependencia.
Generamos un gráfico de PPOO por cada conglomerado.
Código
janitor::chisq.test(df_filled2[,c("run","glosa_pueblo_originario")] |> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6")], by="run", multiple="first") |> janitor::tabyl(glosa_pueblo_originario, clus_pam_om6))# X-squared = 175.35, df = 40, p-value < 2.2e-16#cat("Restringiendo el análisis a quienes reportan MINSAL Rapa Nui, Mapuche y Ninguno") df_filled2[, c("run", "glosa_pueblo_originario")]|> dplyr::left_join( ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[, c("run", "clus_pam_om6")],by ="run", multiple ="first" )|> dplyr::filter(glosa_pueblo_originario %in%c("RAPA NUI (PASCUENSE)", "MAPUCHE", "NINGUNO"))|> janitor::tabyl(glosa_pueblo_originario, clus_pam_om6)|> (\(df) {list(chisq = janitor::chisq.test(df),percentages = df|> janitor::adorn_percentages("col")|> dplyr::mutate(across(2:7, ~round(., 2))) ) })()ppoo_clus_pre_pam_om6_q<- df_filled2[,c("run","glosa_pueblo_originario")] |> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6","factor_inclusivo_real_hist_mas_autperc")], by="run", multiple="first") |> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario=="NINGUNO"& factor_inclusivo_real_hist_mas_autperc!="00"~"DESCONOCIDO", T~glosa_pueblo_originario)) |> janitor::tabyl(glosa_pueblo_originario_rec, clus_pam_om6) |> janitor::adorn_percentages("row")reshape2::melt(ppoo_clus_pre_pam_om6_q, id.vars ="glosa_pueblo_originario_rec") |> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::recode(glosa_pueblo_originario_rec, "OTRO (ESPECIFICAR)"="OTRO(n=86)", #"OTRO(n=77)", "RAPA NUI (PASCUENSE)"="RAPA NUI(n=37)", #"RAPA NUI(n=34)", "YAGÁN (YÁMANA)"="YAGÁN(n=2)",#"YAGÁN(n=2)","AYMARA"="AYMARA(n=15)",#"AYMARA(n=13)","COLLA"="COLLA(n=6)",#"COLLA(n=6)","DIAGUITA"="DIAGUITA(n=3)",#"DIAGUITA(n=3)","KAWÉSQAR"="KAWÉSQAR(n=4)",#"KAWÉSQAR(n=4)","MAPUCHE"="MAPUCHE(n=299)",#"MAPUCHE(n=255)","DESCONOCIDO"=".DESCONOCIDO(n=2.353)",#".DESCONOCIDO(n=1.985)","NINGUNO"=".NINGUNO(n=10.425)"#".NINGUNO(n=9.156)" )) |>ggplot(aes(x = glosa_pueblo_originario_rec, y = value, fill = variable)) +geom_bar(stat ="identity", position ="fill") +scale_fill_manual(values =c("6623, Un trimestre, TSM(5)"="#D2B48C","6612, Un trimestre, TUS(4)"="#E27A5B","6522, Un semestre TSM(2)"="#20B2AA","6574, Comorbilidad un trimestre(3)"="#6B8E23","6268, TSM, 1 año después, TSM(1)"="#2F4F4F","6624, TSM, 1 año después, otras causas(6)"="#708090" )) +labs(title =NULL,x ="Grupo Étnico",y ="Proporción de reportes",fill ="Grupos") +# Cambia el título de la leyenda a "Grupos"theme_minimal() +theme(axis.text.y =element_text(size =12), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =12), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =14), # Tamaño del título del eje Xaxis.title.y =element_text(size =14), # Tamaño del título del eje Yplot.title =NULL, # Tamaño y estilo del título del gráficolegend.title =element_text(size =14, margin =margin(b =-.1)), # Tamaño del título de la leyendalegend.spacing.y =unit(1.5, "lines"),legend.box.spacing =unit(0.5, "lines"), # Controla el espacio entre la leyenda y el gráficolegend.margin =margin(5, 5, 5, 5), legend.key.height =unit(1, "cm"), legend.text =element_text(size =12) # Tamaño del texto de la leyenda ) +coord_flip() # Hacer el gráfico horizontalggsave("_figs/grafico_ancho_achatado_pam_om6_q_25.png", width =10, height =5, dpi=1000)ppoo_clus_pre_pam_om6_q_rapanui<- df_filled2[,c("run","glosa_pueblo_originario")] |> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6","factor_inclusivo_real_hist_mas_autperc")], by="run", multiple="first") |> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario=="NINGUNO"& factor_inclusivo_real_hist_mas_autperc!="00"~"DESCONOCIDO", glosa_pueblo_originario=="NINGUNO"~"NINGUNO", glosa_pueblo_originario=="RAPA NUI (PASCUENSE)"~"RAPA NUI", T~"RESTO")) |> janitor::tabyl(glosa_pueblo_originario_rec, clus_pam_om6) |> janitor::adorn_percentages("row")ppoo_clus_pre_pam_om6_q_rapanui |> knitr::kable("markdown", caption="Clasificación PPOO vs. conglomerados")cat("origen de Rapa Nui?")df_filled2[,c("run","glosa_pueblo_originario")]|> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om6","factor_inclusivo_real_hist_mas_autperc", "codigo_region_rec_base")], by="run", multiple="first")|> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario=="NINGUNO"& factor_inclusivo_real_hist_mas_autperc!="00"~"DESCONOCIDO", glosa_pueblo_originario=="NINGUNO"~"NINGUNO", glosa_pueblo_originario=="RAPA NUI (PASCUENSE)"~"RN", T~"RESTO"))|> dplyr::filter(glosa_pueblo_originario_rec=="RN")|> janitor::tabyl(clus_pam_om6,codigo_region_rec_base)|> knitr::kable("markdown", caption="Origen Establecimiento, PPOO Rapa Nui, según conglomerado")
Pearson's Chi-squared test
data: janitor::tabyl(dplyr::left_join(df_filled2[, c("run", "glosa_pueblo_originario")], ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[, c("run", "clus_pam_om6")], by = "run", multiple = "first"), glosa_pueblo_originario, clus_pam_om6)
X-squared = 175.35, df = 40, p-value < 2.2e-16
Restringiendo el análisis a quienes reportan MINSAL Rapa Nui, Mapuche y Ninguno$chisq
Pearson's Chi-squared test
data: df
X-squared = 116.54, df = 10, p-value < 2.2e-16
$percentages
glosa_pueblo_originario 6623, Un trimestre, TSM(5) 6612, Un trimestre, TUS(4)
MAPUCHE 0.02 0.04
NINGUNO 0.98 0.96
RAPA NUI (PASCUENSE) 0.00 0.00
6522, Un semestre TSM(2) 6624, TSM, 1 año después, otras causas(6)
0.02 0.02
0.97 0.98
0.00 0.00
6574, Comorbilidad un trimestre(3) 6268, TSM, 1 año después, TSM(1)
0.01 0.02
0.98 0.96
0.01 0.02
Clasificación PPOO vs. conglomerados
glosa_pueblo_originario_rec
6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4)
6522, Un semestre TSM(2)
6624, TSM, 1 año después, otras causas(6)
6574, Comorbilidad un trimestre(3)
6268, TSM, 1 año después, TSM(1)
DESCONOCIDO
0.6145346
0.1215470
0.0752231
0.0777731
0.0335742
0.0773481
NINGUNO
0.6186091
0.0960192
0.1081055
0.0693525
0.0391367
0.0687770
RAPA NUI
0.1621622
0.1351351
0.0810811
0.0270270
0.1351351
0.4594595
RESTO
0.6409639
0.1228916
0.1012048
0.0530120
0.0168675
0.0650602
Eventos hospitalarios y reportes de pertenencia a PPOO MINSAL, por conglomerados
origen de Rapa Nui?
Origen Establecimiento, PPOO Rapa Nui, según conglomerado
clus_pam_om6
noRM
RM
6623, Un trimestre, TSM(5)
4
2
6612, Un trimestre, TUS(4)
4
1
6522, Un semestre TSM(2)
3
0
6624, TSM, 1 año después, otras causas(6)
0
1
6574, Comorbilidad un trimestre(3)
4
1
6268, TSM, 1 año después, TSM(1)
0
17
Eventos hospitalarios y reportes de pertenencia a PPOO MINSAL, por conglomerados
Eventos hospitalarios y reportes de pertenencia a PPOO MINSAL, por conglomerados
1.2.1. Trayectorias
Vemos los gráficos de las trayectorias
Código
categories_pam_om6_q<-attr(States_Wide.seq_quarter_t_prim_adm_cens, "labels")new_labels <- categories_pam_om6_qnew_labels[which(categories_pam_om6_q =="Otras causas")] <-"Otras\ncausas"#new_labels[which(categories == "Consumo\nde sustancias")] <- "Consumo de\nsustancias"# Creamos un vector con las columnas llenando con NA si faltan valoressil_pam_om_clus6_q <-wcSilhouetteObs(as.dist(dist_quarter_om), pamRange_quarter_om$clustering$cluster6, measure="ASW")seq_plot_pam_om6_q <-ggseqiplot(States_Wide.seq_quarter_t_prim_adm_cens, group= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,facet_ncol=2, facet_nrow=4, sortv=sil_pam_om_clus6_q) +theme(legend.position ="none")+labs(x="Trimestres", y="# IDs de usuarios")+#guides(fill = guide_legend(nrow = 1))+theme(panel.spacing =unit(0.1, "lines"), # Reduce el espaciado entre los panelesaxis.text.y =element_text(size =15), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =15), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =15), # Tamaño del título del eje Xaxis.title.y =element_text(size =15, margin =margin(r =-10)),#,margin = margin(l = -10)),strip.text =element_text(size =15, margin =margin(b =-15, t=10)),legend.text =element_text(size =15),legend.spacing.x =unit(0.1, 'cm'), # Alinea el título de la leyenda hacia la izquierdalegend.box.margin =margin(t =0, r =0, b =0, l =-50),legend.position ="bottom", legend.justification ="left",panel.spacing.y =unit(0.2, "lines"),plot.margin =margin(10, 10, 10, 10), # Ajusta márgenes globalesstrip.placement ="outside", # Para colocar las tiras fuera de los ejesstrip.background =element_blank() # Elimina el fondo para que parezca más espacioso#legend.key.size = unit(1.5, "lines"), # Aumenta el tamaño de los símbolos en la leyenda )+guides(fill =guide_legend(nrow =1)) +scale_fill_manual(labels = new_labels, values=c("#E2725B", "#556B2F", "#D2B48C",#"#8B4513","#FFFFFF","#808080","#000000"))+scale_color_manual(labels = new_labels, values=c("#E2725B", "#556B2F", "#D2B48C",#"#8B4513","#FFFFFF","#808080","#000000"))seq_plot_pam_om6_q ggsave(filename="_figs/clusters_pam_om6_q_mod_25.png", seq_plot_pam_om6_q, width =12*.95, height =8*.95, dpi=1000)
Trayectorias de hospitalización, orden de sujetos según el primer estado observado y su duración, representando a cada individuo como una línea en el gráfico (observaciones ordenadas de acuerdo a ASW)
Código
seq_plot2_pam_om6_q <-ggseqdplot(States_Wide.seq_quarter_t_prim_adm_cens, group= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,facet_ncol=2, facet_nrow=4) +theme(legend.position ="none")+# Colocar la leyenda abajolabs(x="Trimestres", y="Frecuencia relativa de estados")+theme(panel.spacing =unit(0.1, "lines"),axis.text.y =element_text(size =15), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =15), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =15), # Tamaño del título del eje Xaxis.title.y =element_text(size =15, margin =margin(r =-5)),strip.text =element_text(size =15),panel.spacing.y =unit(0.5, "lines"),strip.placement ="outside", # Para colocar las tiras fuera de los ejesstrip.background =element_blank() # Elimina el fondo para que parezca más espacioso#legend.key.size = unit(1.5, "lines"), # Aumenta el tamaño de los símbolos en la leyenda ) # Colocar la leyenda abajoseq_plot2_pam_om6_qggsave("_figs/clusterspam_om62_q_mod_25.png",seq_plot2_pam_om6_q, width =12, height =8, dpi=1000)seq_plot2_pam_om6_q <-sprintf("%1.2f",pamRange_quarter_om$stats[5,])seq_plot2_pam_om6_q <-as.data.frame(t(seq_plot2_pam_om6_q))colnames(seq_plot2_pam_om6_q)<-attr(pamRange_quarter_om$stats, "name")seq_plot2_pam_om6_q|>knitr::kable()
PBC
HG
HGSD
ASW
ASWw
CH
R2
CHsq
R2sq
HC
0.59
0.77
0.76
0.59
0.59
804.54
0.38
1249.75
0.49
0.10
Trayectorias de hospitalización, frecuencia relativa de estados en un gráfico de barras apiladas por trimestre.
Trayectorias de hospitalización, frecuencia relativa de estados en un gráfico de barras apiladas por trimestre.
De este modo, presenta el cambio agregado en la distribución de estados a lo largo del tiempo, sin considerar las secuencias individuales.
Código
invisible("Definimos las observaciones que tienen siluetas negativas")sil_neg_pam_om_clus6_q <-which(sil_pam_om_clus6_q<0)invisible("A qué conglomerados pertenecen?")table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[sil_neg_pam_om_clus6_q, "clus_pam_om6"])ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$rn<-1:nrow(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)
clus_pam_om6
6623, Un trimestre, TSM(5)
0
6612, Un trimestre, TUS(4)
0
6522, Un semestre TSM(2)
3
6624, TSM, 1 año después, otras causas(6)
132
6574, Comorbilidad un trimestre(3)
0
6268, TSM, 1 año después, TSM(1)
101
1.2.2.Exploración transiciones
1.2.2.a Transiciones- RM y no RM
Tasas de transición no RM a RM y viceversa
Código
invisible("Tasas de transición no RM a RM y viceversa")trim_tasa_pam_om6_q_cens_cnt<-seqcount_t(States_Wide.seq_quarter_t_prim_adm_RM_cens, group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|> dplyr::filter(count>0)|> dplyr::mutate(trans =paste0(from,"_", to))|> dplyr::mutate(across(c("from","to"),~gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .))) trim_tasa_pam_om6_q_cens_rate<-seqtrate_t(States_Wide.seq_quarter_t_prim_adm_RM_cens, group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|> dplyr::filter(rate>0)|> dplyr::mutate(trans =paste0(from,"_", to))|> dplyr::mutate(across(c("from","to"),~gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .)))
Código
trim_tasa_pam_om6_q_cens_rate|> dplyr::left_join(trim_tasa_pam_om6_q_cens_cnt, by=c("from"="from", "glosa_sexo"="glosa_sexo","to"="to"))|> dplyr::rename("recuento"="count")|> dplyr::filter(from %in%c("RM", "noRM"))|>ggplot(aes(x = from, y = to, fill = rate, size=log(recuento+1))) +geom_tile() +coord_flip()+scale_fill_gradient(low ="white", high ="blue") +# Ajusta la escala de colores según tus preferenciaslabs(title ="Tasas de transición, Trimestre (s/censura)",x ="Desde",y ="Hacia",fill ="Rate") +theme_minimal() +facet_wrap(~glosa_sexo)+theme(axis.text.x =element_text(angle =45, hjust =1))+geom_text(aes(label =sprintf("%1.2f", rate), size =log(recuento+1)*.5), color ="black")invisible("Hay muy pocos casos que se entrecruzan entre noRM y RM (fuera de la diagnonal)")
Porcentajes de transición no-RM y RM por cada cluster
trim_tasa2_pam_om6_q_cens_rate|> dplyr::left_join(trim_tasa2_pam_om6_q_cens_cnt, by=c("from"="from", "glosa_sexo"="glosa_sexo","to"="to"))|> dplyr::rename("recuento"="count")|>#dplyr::filter(from %in% c("RM", "noRM"))|> ggplot(aes(x = from, y = to, fill = rate, size=log(recuento+1))) +geom_tile() +coord_flip()+scale_fill_gradient(low ="white", high ="blue") +# Ajusta la escala de colores según tus preferenciaslabs(title ="Tasas de transición, Trimestre (s/censura)",x ="Desde",y ="Hacia",fill ="Rate") +theme_minimal() +facet_wrap(~glosa_sexo)+theme(axis.text.x =element_text(angle =45, hjust =1))+geom_text(aes(label =sprintf("%1.2f", rate), size =log(recuento+1)*.5), color ="black")
Porcentajes de transición, transiciones posteriores, por cada cluster
1.2.2.c Tiempo promedio por cluster
Código
seq_mean_t(States_Wide.seq_quarter_t_prim_adm_cens, group=ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6)|> data.table::as.data.table(keep.rowname=T)|> dplyr::mutate(rn=gsub("\\d", "", rn))|>ggplot(aes(x=rn, fill= factor_inclusivo, y=Mean))+geom_bar(width =1, stat ="identity") +theme_minimal() +facet_wrap(~factor_inclusivo)+labs(title =NULL,x =NULL,y =NULL) +scale_fill_manual(values =c("6623, Un trimestre, TSM(5)"="#D2B48C","6612, Un trimestre, TUS(4)"="#E27A5B","6522, Un semestre TSM(2)"="#20B2AA","6574, Comorbilidad un trimestre(3)"="#6B8E23","6268, TSM, 1 año después, TSM(1)"="#2F4F4F","6624, TSM, 1 año después, otras causas(6)"="#708090" )) +coord_flip()+theme(#axis.text.x = element_blank(),#axis.text.y = element_blank(),panel.grid =element_blank()) +# scale_fill_brewer(palette = "Pastel1", labels=c("Sin\nautoidentificación\nni reconocimiento", "Autoidentificación\nsin reconocimiento", "Ambas")) +geom_text(aes(label =round(Mean,1)), position =position_stack(vjust =0.5), size =3.5, # Ajusta el tamaño de la fuente aquícolor ="black", # Color del textofamily ="sans", # Puedes cambiar la fuente si lo deseasbackground =element_rect(fill ="white", color =NA)) +# Fondo blancotheme(legend.title =element_blank())#, legend.position=c(.8,.15))invisible("No me aporta mucho")
Tiempo promedio en cada estado por estatus PPOO (Trimestral c/censura)
1.2.3. Comparación variables
1.2.3.a. Comparación covariables- PPOO
Código
ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|> dplyr::count(clus_pam_om6, factor_inclusivo_real_hist_mas_autperc)|> dplyr::group_by(clus_pam_om6)|> dplyr::mutate(n_prop =paste0(n, " (",scales::percent(n /sum(n), accuracy=.1),")"))|> dplyr::select(-n)|> tidyr::pivot_wider(names_from = clus_pam_om6, values_from = n_prop, values_fill ="0")|> dplyr::mutate(factor_inclusivo_real_hist_mas_autperc =factor(factor_inclusivo_real_hist_mas_autperc, levels =c("11", "10", "00"), labels=c("Se identifica/hay reconocimeinto", "No se identifica/hay reconocimiento", "No se identifica/no pertenece")))|> dplyr::arrange(factor_inclusivo_real_hist_mas_autperc)|> (\(df) {if (interactive()) {mutate(df, across(-factor_inclusivo_real_hist_mas_autperc, ~gsub("%", "", gsub("\\.", ",", .))))|> rio::export("clipboard")} knitr::kable(df, caption="Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO") })()
Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO
factor_inclusivo_real_hist_mas_autperc
6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4)
6522, Un semestre TSM(2)
6624, TSM, 1 año después, otras causas(6)
6574, Comorbilidad un trimestre(3)
6268, TSM, 1 año después, TSM(1)
Se identifica/hay reconocimeinto
409 (8.4%)
74 (9.9%)
23 (6.4%)
23 (9.6%)
17 (7.6%)
16 (9.2%)
No se identifica/hay reconocimiento
551 (11.3%)
92 (12.3%)
39 (10.9%)
26 (10.9%)
21 (9.4%)
25 (14.4%)
No se identifica/no pertenece
3925 (80.3%)
580 (77.7%)
296 (82.7%)
190 (79.5%)
186 (83.0%)
133 (76.4%)
Vemos las categorías de clasificación de PPOO según autopercepción (en MINSAL y en RSH) y reconocimiento CONADI.
Pearson's Chi-squared test
data: janitor::tabyl(dplyr::mutate(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, death_time_rec = ifelse(death_time == 20, 0, 1)), death_time_rec, clus_pam_om6)
X-squared = 12.855, df = 5, p-value = 0.02478
Fisher's Exact Test for Count Data with simulated p-value (based on
1e+05 replicates)
data: janitor::tabyl(dplyr::mutate(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, death_time_rec = ifelse(death_time == 20, 0, 1)), death_time_rec, clus_pam_om6)
p-value = 0.01452
alternative hypothesis: two.sided
$chisq_statistic
[1] "12.85"
$chisq_df
df
5
$chisq_p_value
[1] "0.0248"
$cramers_v
[1] "0.04"
Descartando valores negativos en sil width$chisq_statistic
[1] "19.29"
$chisq_df
df
5
$chisq_p_value
[1] "0.0017"
$cramers_v
[1] "0.05"
Fisher's Exact Test for Count Data with simulated p-value (based on
1e+05 replicates)
data: janitor::tabyl(dplyr::mutate(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), death_time_rec = ifelse(death_time == 20, 0, 1)), death_time_rec, clus_pam_om6)
p-value = 0.00164
alternative hypothesis: two.sided
Corrección parcial por comparaciones múltiples (Holm–Bonferroni)
Dimension
0
0
1
1
Value
Residuals
p values
Residuals
p values
6623, Un trimestre, TSM(5)
3.448
NA
-3.448
NA
6612, Un trimestre, TUS(4)
-2.516
0.142
2.516
0.142
6522, Un semestre TSM(2)
-1.187
1.000
1.187
1.000
6624, TSM, 1 año después, otras causas(6)
-0.776
1.000
0.776
1.000
6574, Comorbilidad un trimestre(3)
-1.487
1.000
1.487
1.000
6268, TSM, 1 año después, TSM(1)
-0.253
1.000
0.253
1.000
Grupo 1
Grupo 2
Valor p ajustado
6612, Un trimestre, TUS(4)
6623, Un trimestre, TSM(5)
0.075
6522, Un semestre TSM(2)
6623, Un trimestre, TSM(5)
1.000
6624, TSM, 1 año después, otras causas(6)
6623, Un trimestre, TSM(5)
1.000
6574, Comorbilidad un trimestre(3)
6623, Un trimestre, TSM(5)
1.000
6268, TSM, 1 año después, TSM(1)
6623, Un trimestre, TSM(5)
1.000
6522, Un semestre TSM(2)
6612, Un trimestre, TUS(4)
1.000
6624, TSM, 1 año después, otras causas(6)
6612, Un trimestre, TUS(4)
1.000
6574, Comorbilidad un trimestre(3)
6612, Un trimestre, TUS(4)
1.000
6268, TSM, 1 año después, TSM(1)
6612, Un trimestre, TUS(4)
1.000
6624, TSM, 1 año después, otras causas(6)
6522, Un semestre TSM(2)
1.000
6574, Comorbilidad un trimestre(3)
6522, Un semestre TSM(2)
1.000
6268, TSM, 1 año después, TSM(1)
6522, Un semestre TSM(2)
1.000
6574, Comorbilidad un trimestre(3)
6624, TSM, 1 año después, otras causas(6)
1.000
6268, TSM, 1 año después, TSM(1)
6624, TSM, 1 año después, otras causas(6)
1.000
6268, TSM, 1 año después, TSM(1)
6574, Comorbilidad un trimestre(3)
1.000
Código
# Cargar las librerías necesariaslibrary(survival)library(ggplot2)# Crear la variable de supervivenciasurv_obj_6c <-Surv(time = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$death_time,event =ifelse(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$death_time==20,0,1))# Realizar el análisis de Log-Rank (survdiff)surv_diff_6c <-survdiff(surv_obj_6c ~ clus_pam_om6,data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)# Mostrar los resultados del testprint(surv_diff_6c)#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_pairwise_survdiff(formula =Surv(time = death_time,event =ifelse(death_time==20,0,1)) ~ clus_pam_om6,data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,p.adjust.method ="holm")#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_cat("Sin siluetas negativas")surv_diff_6c_neg_sil <-survdiff(Surv(time = death_time,event =ifelse(death_time==20,0,1)) ~ clus_pam_om6,data =subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q))# Mostrar los resultados del testprint(surv_diff_6c_neg_sil)pairwise_survdiff(formula =Surv(time = death_time,event =ifelse(death_time==20,0,1)) ~ clus_pam_om6,data =subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), rho=0,p.adjust.method ="holm")#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_# Ajustar el modelo de Kaplan-Meierkm_fit_6c <-survfit(surv_obj_6c ~ clus_pam_om6,data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)# Extraer los datos del modelo Kaplan-Meier para usar con ggplotkm_data_6c <-data.frame(time = km_fit_6c$time,surv = km_fit_6c$surv,upper = km_fit_6c$upper,lower = km_fit_6c$lower,strata =rep(c("6623, Un trimestre, TSM(5)", "6612, Un trimestre, TUS(4)", "6522, Un semestre TSM(2)", "6624, TSM, 1 año después, otras causas(6)", "6574, Comorbilidad un trimestre(3)", "6268, TSM, 1 año después, TSM(1)"), km_fit_6c$strata))biostat3::survRate(Surv(time = death_time,event =ifelse(death_time==20,0,1)) ~ clus_pam_om6, data= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)|>mutate(tasa_formateada =sprintf("%s [%s-%s] (%s / %s)",gsub("\\.", ",", sprintf("%.2f", rate *10000)),gsub("\\.", ",", sprintf("%.2f", lower *10000)),gsub("\\.", ",", sprintf("%.2f", upper *10000)), event, scales::comma(tstop, big.mark =".", decimal.mark =",", accuracy =1) ) )|> dplyr::select(clus_pam_om6, tasa_formateada)|> (\(df) { rownames(df) <-NULL ; df })()|> (\(df) {if (interactive()) { t(df) |> rio::export("clipboard") } knitr::kable(df, "markdown", caption="Tasas de mortalidad por conglomerado") })()mort_rate_tus_resto<-biostat3::survRate(Surv(time = death_time,event =ifelse(death_time==20,0,1)) ~ clus_pam_om6_rec, data= ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|>mutate(clus_pam_om6_rec=ifelse(grepl("TUS",clus_pam_om6),1,0)) )cat("Diferencia multiplicativa entre cluster TSM 1 trimestre y el resto")epitools::rateratio.midp(c(19, 80, 14650.96, 116453.67))
Call:
survdiff(formula = surv_obj_6c ~ clus_pam_om6, data = ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens)
N Observed Expected
clus_pam_om6=6623, Un trimestre, TSM(5) 4885 58 73.06
clus_pam_om6=6612, Un trimestre, TUS(4) 746 19 11.09
clus_pam_om6=6522, Un semestre TSM(2) 358 8 5.35
clus_pam_om6=6624, TSM, 1 año después, otras causas(6) 239 5 3.58
clus_pam_om6=6574, Comorbilidad un trimestre(3) 224 6 3.32
clus_pam_om6=6268, TSM, 1 año después, TSM(1) 174 3 2.61
(O-E)^2/E (O-E)^2/V
clus_pam_om6=6623, Un trimestre, TSM(5) 3.1026 11.8398
clus_pam_om6=6612, Un trimestre, TUS(4) 5.6468 6.3593
clus_pam_om6=6522, Un semestre TSM(2) 1.3091 1.3840
clus_pam_om6=6624, TSM, 1 año después, otras causas(6) 0.5678 0.5891
clus_pam_om6=6574, Comorbilidad un trimestre(3) 2.1581 2.2332
clus_pam_om6=6268, TSM, 1 año después, TSM(1) 0.0593 0.0609
Chisq= 12.8 on 5 degrees of freedom, p= 0.02
Pairwise comparisons using Log-Rank test
data: ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens and clus_pam_om6
6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4) 0.043
6522, Un semestre TSM(2) 1.000
6624, TSM, 1 año después, otras causas(6) 1.000
6574, Comorbilidad un trimestre(3) 0.688
6268, TSM, 1 año después, TSM(1) 1.000
6612, Un trimestre, TUS(4)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) 1.000
6624, TSM, 1 año después, otras causas(6) 1.000
6574, Comorbilidad un trimestre(3) 1.000
6268, TSM, 1 año después, TSM(1) 1.000
6522, Un semestre TSM(2)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) -
6624, TSM, 1 año después, otras causas(6) 1.000
6574, Comorbilidad un trimestre(3) 1.000
6268, TSM, 1 año después, TSM(1) 1.000
6624, TSM, 1 año después, otras causas(6)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) -
6624, TSM, 1 año después, otras causas(6) -
6574, Comorbilidad un trimestre(3) 1.000
6268, TSM, 1 año después, TSM(1) 1.000
6574, Comorbilidad un trimestre(3)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) -
6624, TSM, 1 año después, otras causas(6) -
6574, Comorbilidad un trimestre(3) -
6268, TSM, 1 año después, TSM(1) 1.000
P value adjustment method: holm
Sin siluetas negativasCall:
survdiff(formula = Surv(time = death_time, event = ifelse(death_time ==
20, 0, 1)) ~ clus_pam_om6, data = subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens,
!rn %in% sil_neg_pam_om_clus6_q))
N Observed Expected
clus_pam_om6=6623, Un trimestre, TSM(5) 4885 58 74.24
clus_pam_om6=6612, Un trimestre, TUS(4) 746 19 11.27
clus_pam_om6=6522, Un semestre TSM(2) 355 8 5.39
clus_pam_om6=6624, TSM, 1 año después, otras causas(6) 107 5 1.61
clus_pam_om6=6574, Comorbilidad un trimestre(3) 224 6 3.38
clus_pam_om6=6268, TSM, 1 año después, TSM(1) 73 1 1.11
(O-E)^2/E (O-E)^2/V
clus_pam_om6=6623, Un trimestre, TSM(5) 3.5515 15.135
clus_pam_om6=6612, Un trimestre, TUS(4) 5.3063 6.004
clus_pam_om6=6522, Un semestre TSM(2) 1.2590 1.333
clus_pam_om6=6624, TSM, 1 año después, otras causas(6) 7.0990 7.220
clus_pam_om6=6574, Comorbilidad un trimestre(3) 2.0384 2.112
clus_pam_om6=6268, TSM, 1 año después, TSM(1) 0.0109 0.011
Chisq= 19.3 on 5 degrees of freedom, p= 0.002
Pairwise comparisons using Log-Rank test
data: subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, and clus_pam_om6 !rn %in% sil_neg_pam_om_clus6_q) and clus_pam_om6
6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4) 0.040
6522, Un semestre TSM(2) 1.000
6624, TSM, 1 año después, otras causas(6) 0.021
6574, Comorbilidad un trimestre(3) 0.639
6268, TSM, 1 año después, TSM(1) 1.000
6612, Un trimestre, TUS(4)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) 1.000
6624, TSM, 1 año después, otras causas(6) 1.000
6574, Comorbilidad un trimestre(3) 1.000
6268, TSM, 1 año después, TSM(1) 1.000
6522, Un semestre TSM(2)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) -
6624, TSM, 1 año después, otras causas(6) 1.000
6574, Comorbilidad un trimestre(3) 1.000
6268, TSM, 1 año después, TSM(1) 1.000
6624, TSM, 1 año después, otras causas(6)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) -
6624, TSM, 1 año después, otras causas(6) -
6574, Comorbilidad un trimestre(3) 1.000
6268, TSM, 1 año después, TSM(1) 1.000
6574, Comorbilidad un trimestre(3)
6612, Un trimestre, TUS(4) -
6522, Un semestre TSM(2) -
6624, TSM, 1 año después, otras causas(6) -
6574, Comorbilidad un trimestre(3) -
6268, TSM, 1 año después, TSM(1) 1.000
P value adjustment method: holm
Tasas de mortalidad por conglomerado
clus_pam_om6
tasa_formateada
6623, Un trimestre, TSM(5)
5,99 [4,55-7,74] (58 / 96.823)
6612, Un trimestre, TUS(4)
12,97 [7,81-20,25] (19 / 14.651)
6522, Un semestre TSM(2)
11,32 [4,89-22,30] (8 / 7.070)
6624, TSM, 1 año después, otras causas(6)
10,58 [3,44-24,70] (5 / 4.724)
6574, Comorbilidad un trimestre(3)
13,68 [5,02-29,77] (6 / 4.387)
6268, TSM, 1 año después, TSM(1)
8,70 [1,79-25,42] (3 / 3.449)
Diferencia multiplicativa entre cluster TSM 1 trimestre y el resto$data
Outcome
Predictor Cases Person-time
Exposed1 19 14650.96
Exposed2 80 116453.67
Total 99 131104.63
$measure
rate ratio with 95% C.I.
Predictor estimate lower upper
Exposed1 1.0000000 NA NA
Exposed2 0.5262371 0.3261088 0.8946161
$p.value
two-sided
Predictor midp.exact wald
Exposed1 NA NA
Exposed2 0.01919532 0.01134723
attr(,"method")
[1] "Median unbiased estimate & mid-p exact CI"
Código
# Crear el gráfico de Kaplan-Meier con ggplot2ggplot(km_data_6c, aes(x = time, y = surv, color = strata)) +geom_step(size =1.2) +# Curvas de supervivencia#geom_ribbon(aes(ymin = lower, ymax = upper, fill = strata), alpha = 0.2, color = NA) + # Intervalos de confianzalabs(title ="Curvas de Kaplan-Meier",x ="Tiempo (meses)",y ="Probabilidad de Supervivencia",color ="Grupo",fill ="Grupo" ) +theme_minimal() +theme(legend.position ="bottom")
pairwise_chisq_gof_test(table(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om6,ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens$codigo_region_rec_base), p.adjust.method="holm")|> knitr::kable("markdown", caption="Dependencia categórica sol. 4 conglomerados, por pares de categorías en RM")
Dependencia categórica sol. 4 conglomerados, por pares de categorías en RM
tab_cluster_region_pam_om6_q<-ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens|> dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], by =c("estab_homo_base"="ESTAB_HOMO"), multiple ="first")|> janitor::tabyl(codigo_region, clus_pam_om6)|> janitor::adorn_percentages("col")|> janitor::adorn_rounding(digits =2)#colnames(tab_cluster_region_pam_om4_q)<- c("reg", "c1", "c4", "c3", "c5", "c6", "c7", "c8", "c9", "c2")cod_reg_homo_pam_om6_q<-data.frame(codigo_region =1:16,nombre_region =c("Región de Tarapacá","Región de Antofagasta","Región de Atacama","Región de Coquimbo","Región de Valparaíso","Región del Libertador General Bernardo O'Higgins","Región del Maule","Región del Biobío","Región de La Araucanía","Región de Los Lagos","Región de Aysén del General Carlos Ibáñez del Campo","Región de Magallanes y de la Antártica Chilena","Región Metropolitana de Santiago","Región de Los Ríos","Región de Arica y Parinacota","Región de Ñuble" ),stringsAsFactors =FALSE)dplyr::mutate(tab_cluster_region_pam_om6_q, promedio_fila =rowMeans(across(2:length(colnames(tab_cluster_region_pam_om6_q))))) |> dplyr::arrange(desc(promedio_fila)) |> dplyr::left_join(cod_reg_homo_pam_om6_q, by="codigo_region") |> dplyr::select(codigo_region, nombre_region, everything()) |> dplyr::select(-promedio_fila)|> dplyr::mutate_at(3:(length(colnames(tab_cluster_region_pam_om6_q))+1),~scales::percent(.))|> knitr::kable(caption="Porcentaje por región")
Porcentaje por región
codigo_region
nombre_region
6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4)
6522, Un semestre TSM(2)
6624, TSM, 1 año después, otras causas(6)
6574, Comorbilidad un trimestre(3)
6268, TSM, 1 año después, TSM(1)
13
Región Metropolitana de Santiago
45%
35%
48%
44%
57%
44%
8
Región del Biobío
10%
8%
9%
13%
9%
11%
5
Región de Valparaíso
8%
13%
10%
7%
7%
7%
10
Región de Los Lagos
6%
20%
4%
7%
10%
3%
9
Región de La Araucanía
5%
4%
6%
3%
5%
5%
7
Región del Maule
4%
3%
2%
6%
4%
5%
6
Región del Libertador General Bernardo O’Higgins
4%
3%
5%
4%
2%
1%
2
Región de Antofagasta
2%
1%
4%
1%
1%
5%
12
Región de Magallanes y de la Antártica Chilena
1%
2%
2%
3%
1%
5%
1
Región de Tarapacá
2%
1%
2%
2%
1%
5%
14
Región de Los Ríos
3%
3%
2%
3%
0%
2%
16
Región de Ñuble
2%
2%
2%
3%
1%
3%
11
Región de Aysén del General Carlos Ibáñez del Campo
pairwise_chisq_gof_test(dplyr::filter(tab_clus_macrozona_pam_om6_q,macrozona!="RM")[-1], p.adjust.method="holm")|> knitr::kable("markdown", caption="Dependencia categórica sol. 6 conglomerados, por pares de categorías en Macrozona (corrección Holm-Bonferroni)")#Groups sharing a letter are not significantlt different (alpha = 0.05)
Dependencia categórica sol. 6 conglomerados, por pares de categorías en Macrozona (corrección Holm-Bonferroni)
pairwise_chisq_gof_test(tab_clus_sexo_pam_om6_q[-1], p.adjust.method="holm")|> dplyr::mutate(p= dplyr::case_when(p<0.001~"<0.001",T~sprintf("%1.3f",p)))|> dplyr::mutate(p.adj= dplyr::case_when(p.adj<0.001~"<0.001",T~sprintf("%1.3f",p.adj)))|> knitr::kable("markdown", caption="Dependencia categórica sol. 7 conglomerados, por pares de categorías en Sexo (corrección Holm-Bonferroni)")
Dependencia categórica sol. 7 conglomerados, por pares de categorías en Sexo (corrección Holm-Bonferroni)
Descriptivos, edad minima de ingreso por conglomerado
clus_pam_om6
sum
6623, Un trimestre, TSM(5)
20.60 ± 4.34 ; 20 [17, 24]
6612, Un trimestre, TUS(4)
22.42 ± 4.30 ; 23 [19, 26]
6522, Un semestre TSM(2)
19.89 ± 4.26 ; 19 [16, 23]
6624, TSM, 1 año después, otras causas(6)
20.49 ± 4.13 ; 20 [17, 23]
6574, Comorbilidad un trimestre(3)
21.86 ± 4.20 ; 21 [18, 25]
6268, TSM, 1 año después, TSM(1)
20.08 ± 4.26 ; 19 [16, 23]
Código
dt_ing_calendar_quarter_t_desde_primera_adm_dedup|>filter(quarter ==0)|>inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[, c("run", "clus_pam_om6")],by ="run")|> dplyr::mutate(clus_pam_om6=str_wrap(clus_pam_om6, width =20))|> dplyr::group_by(clus_pam_om6)|> dplyr::summarise(mean_edad =mean(min_edad_anos),sd_edad =sd(min_edad_anos),n =n())|> dplyr::mutate(sem = sd_edad /sqrt(n),error_lower = mean_edad - sem,error_upper = mean_edad + sem)|>ggplot(aes(x = clus_pam_om6, y = mean_edad)) +geom_point(color ="black", size =3) +geom_errorbar(aes(ymin = error_lower, ymax = error_upper), width =0.2, color ="black") +labs(x ="Conglomerado (k = 4)", y ="Edad al primer evento 2018 promedio") +theme_minimal() +coord_flip() +theme(axis.text.y =element_text(size =17* .7, face ="bold"),axis.text.x =element_text(size =17* .7, face ="bold", lineheight =0.9),axis.title.x =element_text(size =16* .7, face ="bold"),axis.title.y =element_text(size =16* .7, face ="bold"),plot.margin =unit(c(0.5, 0.5, 0.5, 0.5), "cm"))ggsave("_figs/edad_minima_por_cluster_pam_om6_q_25.png", width=8, height=5, dpi=600)
Edad promedio primer ingreso con intervalo de confianza por conglomerado
Código
invisible("Prueba de Levene par igualdad de varianzas")with(dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>% dplyr::filter(quarter ==0) %>% dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"), car::leveneTest(min_edad_anos, clus_pam_om6))#Sig.anova_clus_pam_om6_q <-oneway.test(min_edad_anos ~ clus_pam_om6, data = dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>% dplyr::filter(quarter ==0) %>% dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"),var.equal = T)#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:with(dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>% dplyr::filter(quarter ==0) %>% dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"), oneway_anova_effect_size (min_edad_anos, clus_pam_om6))# eta ^2 [1] 0.02228232# Ver los resultados del ANOVAprint(anova_clus_pam_om6_q)#F = 30.174, num df = 5, denom df = 6620, p-value < 2.2e-16cat("Descartando valores negativos en sil width")with(dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>% dplyr::filter(quarter ==0) %>% dplyr::inner_join(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)[,c("run","clus_pam_om6")], by="run"), oneway.test(min_edad_anos ~ clus_pam_om6,var.equal = F) )#F = 29.5, num df = 5.00, denom df = 383.94, p-value < 2.2e-16
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 5 1.1069 0.3543
6620
$anova_summary
Df Sum Sq Mean Sq F value Pr(>F)
group 5 2810 561.9 30.17 <2e-16 ***
Residuals 6620 123280 18.6
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
$eta_squared
[1] 0.02228232
One-way analysis of means
data: min_edad_anos and clus_pam_om6
F = 30.174, num df = 5, denom df = 6620, p-value < 2.2e-16
Descartando valores negativos en sil width
One-way analysis of means (not assuming equal variances)
data: min_edad_anos and clus_pam_om6
F = 29.5, num df = 5.00, denom df = 383.94, p-value < 2.2e-16
Código
rstatix::games_howell_test(min_edad_anos ~ clus_pam_om6, data =dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>% dplyr::filter(quarter ==0) %>% dplyr::inner_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om6")], by="run"))|> dplyr::select(-1)|> dplyr::mutate(summary =sprintf("%.2f [%.2f, %.2f], p= %s",as.numeric(estimate), as.numeric(conf.low), as.numeric(conf.high), ifelse(p.adj <0.001, "<0.001", sprintf("%.3f", p.adj))))|> dplyr::select(!any_of(c("estimate","conf.low", "conf.high", "p.adj", "p.adj.signif")))|> knitr::kable("markdown", col.names=c("Conglomerado1","Conglomerado2", "Estimación"), caption="Post-hoc, conglomerado vs. Promedio días de tratamiento")cat("Descartando valores negativos en sil width")sens_min_anios_clus_pam_om6_q<-rstatix::games_howell_test(min_edad_anos ~ clus_pam_om6,data = dt_ing_calendar_quarter_t_desde_primera_adm_dedup %>% dplyr::filter(quarter ==0) %>% dplyr::inner_join(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q)[,c("run","clus_pam_om6")], by="run") )
Post-hoc, conglomerado vs. Promedio días de tratamiento
Pearson's Chi-squared test
data: df
X-squared = 42.542, df = 20, p-value = 0.002349
Fisher's Exact Test for Count Data with simulated p-value (based on
1e+05 replicates)
data: df
p-value = 0.00144
alternative hypothesis: two.sided
Porcentajes por columna, conglomerado vs. Previsión
$chisq_statistic
[1] "42.54"
$chisq_df
df
20
$chisq_p_value
[1] "0.0023"
$cramers_v
[1] "0.04"
Fisher's Exact Test for Count Data with simulated p-value (based on
1e+05 replicates)
data: with(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, table(prev_benef_rec_post, clus_pam_om6))
p-value = 0.00156
alternative hypothesis: two.sided
Descartando valores negativos en sil width$chisq_statistic
[1] "35.74"
$chisq_df
df
20
$chisq_p_value
[1] "0.0165"
$cramers_v
[1] "0.04"
Fisher test para valores ASW negativos
Fisher's Exact Test for Count Data with simulated p-value (based on
1e+05 replicates)
data: with(subset(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens, !rn %in% sil_neg_pam_om_clus6_q), table(prev_benef_rec_post, clus_pam_om6))
p-value = 0.01224
alternative hypothesis: two.sided
Comparación post-hoc, conglomerado-previsión
Dimension
6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4)
6522, Un semestre TSM(2)
6624, TSM, 1 año después, otras causas(6)
6574, Comorbilidad un trimestre(3)
6268, TSM, 1 año después, TSM(1)
ISAPRE
1.82 (p=1.000)
-1.68 (p=1.000)
-0.14 (p=1.000)
0.43 (p=1.000)
-1.63 (p=1.000)
-0.14 (p=1.000)
FONASA D
-0.57 (p=1.000)
1.86 (p=1.000)
-0.34 (p=1.000)
-0.83 (p=1.000)
0.36 (p=1.000)
-1.06 (p=1.000)
FONASA BC
-1.61 (p=1.000)
-0.25 (p=1.000)
-0.60 (p=1.000)
1.33 (p=1.000)
2.08 (p=1.000)
1.89 (p=1.000)
FONASA A
-1.58 (p=1.000)
1.88 (p=1.000)
1.07 (p=1.000)
-0.48 (p=1.000)
-0.03 (p=1.000)
-0.31 (p=1.000)
FFAA
4.47 (p<0.001)
-3.07 (p=0.064)
-0.13 (p=1.000)
-1.73 (p=1.000)
-1.94 (p=1.000)
-1.83 (p=1.000)
Dependencia categórica sol. 4 conglomerados, por pares de categorías en Previsión (corrección Holm-Bonferroni)
n
group1
group2
statistic
p
df
p.adj
p.adj.signif
5631
6623, Un trimestre, TSM(5)
6612, Un trimestre, TUS(4)
19.0382198
0.000772
4
0.0116
*
5243
6623, Un trimestre, TSM(5)
6522, Un semestre TSM(2)
1.7752048
0.777000
4
1.0000
ns
5124
6623, Un trimestre, TSM(5)
6624, TSM, 1 año después, otras causas(6)
5.9453320
0.203000
4
1.0000
ns
5109
6623, Un trimestre, TSM(5)
6574, Comorbilidad un trimestre(3)
10.3182396
0.035400
4
0.4960
ns
5059
6623, Un trimestre, TSM(5)
6268, TSM, 1 año después, TSM(1)
7.7436944
0.101000
4
1.0000
ns
1104
6612, Un trimestre, TUS(4)
6522, Un semestre TSM(2)
5.5596504
0.235000
4
1.0000
ns
985
6612, Un trimestre, TUS(4)
6624, TSM, 1 año después, otras causas(6)
5.2224487
0.265000
4
1.0000
ns
970
6612, Un trimestre, TUS(4)
6574, Comorbilidad un trimestre(3)
3.6317932
0.458000
4
1.0000
ns
920
6612, Un trimestre, TUS(4)
6268, TSM, 1 año después, TSM(1)
5.7191438
0.221000
4
1.0000
ns
597
6522, Un semestre TSM(2)
6624, TSM, 1 año después, otras causas(6)
4.2316829
0.376000
4
1.0000
ns
582
6522, Un semestre TSM(2)
6574, Comorbilidad un trimestre(3)
6.7514257
0.150000
4
1.0000
ns
532
6522, Un semestre TSM(2)
6268, TSM, 1 año después, TSM(1)
5.7625216
0.218000
4
1.0000
ns
463
6624, TSM, 1 año después, otras causas(6)
6574, Comorbilidad un trimestre(3)
2.6269862
0.622000
4
1.0000
ns
413
6624, TSM, 1 año después, otras causas(6)
6268, TSM, 1 año después, TSM(1)
0.5684341
0.967000
4
1.0000
ns
398
6574, Comorbilidad un trimestre(3)
6268, TSM, 1 año después, TSM(1)
1.7926252
0.774000
4
1.0000
ns
La asociación es lvemente significativa y muy débil. Si no se incluyen los valores con ASW negativos, la asociación no es significativa.
La revisión de los resultados post-hoc permite observar que 6035, Un trimestre, TSM(6) presenta un mayor porcentaje de pacientes en este conglomerado en una previsión de FFAA. Con todo, esta asociación no es consistente en las distintas pruebas.